perm filename PF[PAG,LCS] blob
sn#597512 filedate 1981-07-04 generic text, type T, neo UTF8
00100 TITLE PFAIL; ********* OCT 78 *********
00200 INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT,INMUS
00300 ; ENTRY LOOKF,LOOKX,LOOK,SHFTQ,SORT2,NORH,FNDEND,MINMAX
00400 ENTRY LOOKF,LOOKX,LOOK
00500 ENTRY IFIX,FLOAT,RCURVE
00600 ;; ENTRY PFIBX,PFIB,RLOOP,BLTEM,IFIX,FLOAT
00700 ENTRY MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0
00710 ;; ENTRY GETPTS,MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0
00800 ENTRY PSHFT,ADRST,STAFF,RIGHT,RESTS,EXCHG,EXCH,SHRNK,EXPND,CLFNUM
00900 ENTRY SLRV,CLEFN,MMNN,CODEN,ZERO,BARFAC
01000 EXTERNAL .COMM.,XRN,KJY,PTR,POSI,AMOD,KNR,NNP,PX,XXX,Q,SF,LLL
01100 EXTERNAL RCLF,STF,PTMOVE,IPG,JN,RCLF,MNX,ALOG,ENDL
01200 DEFINE ERROR (MSG)
01300 < JSA 16,.ERROR
01400 JUMP [ASCIZ/MSG/
01500 ]
01600 >
01700
01800 .ERROR: 0
01900 OUTSTR [ASCIZ/?
02000 /] ;MAKE SURE HE CAN SEE HIS ERROR
02100 OUTSTR @(16) ;OUTPUT ERROR MESSAGE
02200 CALLI 1,12 ;LET USER CONTINUE
02300 JRA 16,1(16)
02400
02500 CH←13
02600
02700 REGS: BLOCK 20
02800
02900 ;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .MS
03000 LOOKF: 0
03100 MOVSI 0,'MS '
03200 JRST LOOK1
03300 LOOKX: 0
03400 MOVE 0,@1(16)
03500 MOVEM 0,FILNAM
03600 JSA 16, INTFIQ
03700 MOVE 0,DIR
03800 JRST LOOK1
03900 LOOK: 0
04000 MOVEI 0,0
04100 LOOK1: MOVEM 0,DIR+1
04200 MOVE 0,@(16)
04300 MOVEM 0,FILNAM
04400 JSA 16, INTFIQ
04500 SETZM DIR+2
04600 SETZM DIR+3
04700 LOOKUP CH,DIR
04800 TDZA 0,0
04900 MOVNI 0,1
05000 JRA 16,1(16)
05100
05200 INTFIQ: 0 ;INITS DSK FOR INPUT
05300 MOVEI REGS
05400 BLT REGS+3
05500 INIT CH,17
05600 SIXBIT/DSK/
05700 0
05800 HALT .-3
05900 ; ERROR <CAN'T INIT DSK!>
06000 PUSHJ 17,INTF4
06100 JRA 16,0(16)
06200
06300 INTF4: MOVE 0,FILNAM#
06400 MOVEM 0,FN#
06500 MOVE 1,[POINT 7,FN]
06600 INTF3: MOVE 2,[POINT 6,DIR]
06700 SETZM DIR
06800 MOVEI 3,5
06900 INTF1: ILDB 0,1
07000 CAIN 0," "
07100 JRST INTF2
07200 SUBI 0,40
07300 IDPB 0,2
07400 SOJG 3,INTF1
07500 INTF2: HRLZI REGS
07600 BLT 4
07700 POPJ 17,
07800
07900 DIR: BLOCK 4
08000
08100 ;SHFTQ: 0 ;CALL SHFTQ(R)
08200 ; MOVE JN+1
08300 ; SOS
08400 ; SETZ 1,
08500 ; MOVE 3,@(16) ;R
08600 ;SHQ: MOVE 2,XRN(1)
08700 ; FADRM 3,Q-1(2)
08800 ; CAMGE 1,0
08900 ; AOJA 1,SHQ
09000 ; JRA 16,1(16)
09100
09200 ;SORT2: 0 ;SUBROUTINE SORT2(RPOS,M)
09300 ; MOVEI 2,2 ;DIMENSION RPOS(2,200)
09400 ;SO3: MOVE 6,2 ;(K=L HERE)
09500 ; SETO 11, ;L=2
09600 ; HRRZI 3,@(16) ;3 J=-1
09700 ; MOVE 4,2 ;RX=RPOS(1,L-1)
09800 ; SUBI 4,1 ;L-1
09900 ; IMULI 4,2
10000 ; ADDI 4,(3)
10100 ; MOVE 5,-2(4) ;RX
10200 ;SO2: MOVE 7,6 ; DO 2 K=L,M
10300 ; ;IF(RPOS(1,K).GE.RX)GO TO 2
10400 ; IMULI 7,2 ;IF(RPOS(1,K).GE.RX)GO TO 2
10500 ; ADDI 7,(3)
10600 ; CAMG 5,-2(7)
10700 ; JRST SO1 ; CONTINUE
10800 ; MOVE 5,-2(7) ; RX=RPOS(1,K)
10900 ;;;C WHY WERE ALL THE RX'S JX ????? 9/6/73
11000 ; MOVE 11,6 ;J=K
11100 ;SO1: CAMGE 6,@1(16) ;2 CONTINUE
11200 ; AOJA 6,SO2
11300 ; JUMPL 11,SO4 ;IF(J)GO TO 4
11400 ; MOVE 12,2 ;K=L-1
11500 ; SOS 12
11600 ; IMULI 12,2 ;(K*2)
11700 ; ADD 12,3 ;CALL EXCH(RPOS(1,K),RPOS(1,J))
11800 ; MOVE 10,-2(12)
11900 ; IMULI 11,2
12000 ; ADD 11,3
12100 ; EXCH 10,-2(11)
12200 ; MOVEM 10,-2(12)
12300 ; MOVE 10,-1(12) ;CALL EXCH(RPOS(2,K),RPOS(2,J))
12400 ; EXCH 10,-1(11)
12500 ; MOVEM 10,-1(12)
12600 ;SO4: CAMGE 2,@1(16) ;4 L=L+1
12700 ; AOJA 2,SO3 ;IF(L.LE.M)GO TO 3
12800 ; JRA 16,2(16) ;END
12900
13000 ;NORH: 0 ;FUNCTION NORH(KK)
13100 ; MOVE 15,@1(16); ;NOW**** FUNCTION NORH(KK,K)
13200 ; MOVE 1,XRN+=499(15) ;FIND VALUE IN NN ARRAY IN DO LOOP.
13300 ; MOVEM 1,@(16); ; ;KK=NN(K)
13400 ; SETZ 0,
13500 ; JUMPLE 1,NOR
13600 ; CAILE 1,2; ; ;NORH=-1 IF KK≤0, >18, NOT 1,2,4,17.
13700 ; CAIN 1,4
13800 ; JRA 16,1(16)
13900 ; CAIE 1,=18; ; ;USED IN RESPC.F4
14000 ; CAIN 1,=17
14100 ; JRA 16,1(16)
14200 ;NOR: SETO 0,
14300 ; JRA 16,1(16)
14400
14500 ;FNDEND: 0 ;CALL FNDEND(R)
14600 ; SETZ 1,
14700 ;FA: MOVE 2,XRN+=500(1) ;NN(K)
14800 ; JUMPLE 2,FB
14900 ; CAIG 2,3
15000 ; JRST FC
15100 ; CAIE 2,=17
15200 ; CAIN 2,=18
15300 ; SKIPA
15400 ;FB: AOJA 1,FA ;ASSUMES IT WILL ALWAYS END PROPERLY!!!
15500 ;FC: MOVN 2,XRN(1) ; MM(K)
15600 ; FADR 2,[2.0]
15700 ; FADR 2,ENDL ; ;+ENDLN
15800 ; MOVEM 2,@(16)
15900 ; JRA 16,1(16)
16000
16100 ;MINMAX: 0 ; SUBROUTINE MINMAX(JRN)
16200 ; MOVEI 1,@(16) ;COMMON /MNX/MIN,MAX,JT DIM. JRN(1)
16300 ; MOVE 0,(1); ;GET FIRST VALUE OF CURRENT JRN ARRAY
16400 ; MOVE 3,
16500 ; MOVEI 2,2; ;; MIN=10000
16600 ;MM: CAMLE 0,1(1) ; MAX=0
16700 ; MOVE 0,1(1) ;; DO 107 K=1,JT
16800 ; CAMGE 3,1(1) ; ;; NN=JRN(K)
16900 ; MOVE 3,1(1) ; ;; IF(NN.LT.MIN)MIN=NN
17000 ; AOJ 1,
17100 ; CAMGE 2,MNX+2
17200 ; AOJA 2,MM; ;107; IF(NN.GT.MAX)MAX=NN
17300 ; MOVEM 0,MNX; ;; END
17400 ; MOVEM 3,MNX+1
17500 ; JRA 16,1(16)
17600
17700 ;PFIBX: 0 ;DATA FIB/0.618/, RFIB/-.382/,ALG/0.30103/
17800 ; ; ;100; ACCEPT 10,A 10; FORMAT(F)
17900 ; MOVE 12,@(16); ; ;PFIBX=14
18000 ; MOVE 13,[14.0]; ; ;IF(A.EQ.1)GO TO 20
18100 ; CAMN 12,[1.0]; ; ;Z=FIB
18200 ; JRST PFX; ; ;IF(A.LT.1)Z=RFIB
18300 ; JSA 16,ALOG; ; ;RH=ABS(ALOG(A)/ALOG(2.0))
18400 ; JUMP 12
18500 ; FDVR 0,[0.6931472]
18600 ; MOVM 11,0
18700 ; MOVE 10,[0.618]
18800 ; SKIPG ; ; ;L=RH
18900 ; MOVN 10,[0.382]; ; ;IF(L.EQ.0)GO TO 4
19000 ; KIFIX 7,11
19100 ; MOVE 6,7; ; ;SAVE L FOR LATER
19200 ; JUMPE 6,PFZ
19300 ;PF: MOVE 2,13 ; DO 3 K=1,L
19400 ; FMPR 2,10; ; ;3; PFIBX=PFIBX+PFIBX*Z
19500 ; FADR 13,2
19600 ; SOJG 6,PF
19700 ;PFZ: FLTR 7,7 ;4 RH=RH-L
19800 ; FSBR 11,7; ; ;IF(RH.EQ.0)GO TO 20
19900 ; JUMPE 11,PFX;
20000 ; MOVE 2,13
20100 ; FMPR 2,10
20200 ; FMPR 2,11; ; ;PFIBX=PFIBX+PFIBX*Z*RH
20300 ; FADR 13,2
20400 ;PFX: MOVE 0,13 ;SEND BACK THE RESULT
20500 ; JRA 16,1(16)
20600
20700 ;PFIB: 0 ;FUNCTION PFIB(P) PSEUDO-FIBONACCI RHYTHM SPACER
20800 ; MOVN 0,@(16); ;PFIB=(P+(.125-P)*(.8+.01*P))*50
20900 ; FADR 0,[0.125]; ;END
21000 ; MOVE 1,@(16)
21100 ; FMPR 1,[0.02]
21200 ; FADR 1,[0.8]
21300 ; FMPR 0,1
21400 ; FADR 0,@(16)
21500 ; FMPR 0,[50.0]
21600 ; JRA 16,1(16)
21700
21800 ;RLOOP: 0 ;CALL RLOOP(A,B,K)
21900 ; HRLI 1,@1(16) ;DIMENSION A(1),B(1) -- SOURCE
22000 ; HRRI 1,@(16) ;DO 1 J=1,K -- DESTINATION
22100 ; MOVEI 2,@(16) ;1 A(J)=B(J) -- WORD COUNT
22200 ; ADD 2,@2(16) ;LOC OF ARRAY A + WDCNT.
22300 ; BLT 1,-1(2)
22400 ; JRA 16,3(16)
22500
22600 ;BLTEM: 0
22700 ; HRLI 1,PX ;KWDS(...)=KPN(...) PX IS LOC. OF KPN ARRAY
22800 ; HRRI 1,PTR ;RIGHT HALF IS LOC OF KWDS ARRAY
22900 ; MOVE 2,RCLF+3 ;GET NUM. OF ITEMS (RCLF+3=ITEM)
23000 ; BLT 1,PTR(2) ; PTR(2) IS WD CNT. (ITEM+1)
23100 ; HRLI 1,Q ;RN(...)=Q(...)
23200 ; HRRI 1,XRN
23300 ; MOVE 2,POSI+=9 ;THIS IS JPQ, NUM OF WDS.
23400 ; BLT 1,XRN-1(2)
23500 ; JRA 16,0(16)
23600
23700 IFIX: 0
23800 KIFIX 0,@(16)
23900 JRA 16,1(16)
24000 FLOAT: 0
24100 FLTR 0,@(16)
24200 JRA 16,1(16)
24300
24400 K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
24500
24600 ; SUBROUTINE GETPTS
24700 ; COMMON/KNR/N(500) /NNP/NP(500)
24800 ;XXX COMMON/XRN/RN(4000) /KJY/ K,J
24900 ; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
25000 ;XXX 1/PTR/PWDS(250),ITEM,LL,I,IX
25100 ; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
25200 ; 1,(R6,RJQ(4))
25300
25400 ;GETPTS: 0 ;CALL GETPTS(N,RN,PWDS)
25500 SETZ J, ; J=0
25600 SETZ K, ; K=0
25700 MOVE JJ2,POSI+=8
25800 KIFIX R2,.COMM. ;GET THE STAFF NUM. (NEG= ALL IN THIS PROG.)
25900 SETZ X,
26000 MOVEI M,@2(16); DO 1 M=1,ITEM
26100 G1: AOJ X,
26200 MOVE L,(M)
26300 MOVEI R,@1(16) ;L=PWDS(M)
26400 ADDI R,(L) ;IF(RTLINE(L))GO TO 1
26500
26600 JUMPL R2,G9 ;NEG R2=ALL STAVES
26700 KIFIX A,1(R) ;CHECK NOW FOR CORRECT STAFF
26800 CAME R2,A
26900 JRST GX ;NOT THE ONE.
27000
27100 ;* MOVE 1,1(R) ;RN(L+2)
27200 ;;NEVER USED IN 'PARTS'- CAML R2,[=5.0]
27300 ;; JRST GZ
27400 ;PT MOVE A,1(R)
27500 ;; SKIPE IPG ;IF(IPG)GO TO GSTF
27600 ;; JRST GSTF
27700 ;; KIFIX A,A
27800 ;; FLTR A,A ;STAFF=IFIX(STAFF) DROPS DECIS.
27900 ;PT SKIPL IPG
28000 ;PT JRST G9
28100 ;PTGSTF: CAME R2,A ;FINDS STAFF #
28200 ;PT JRST GX
28300 ;;GZ: MOVE A,.COMM.+7 ;RY=RN(L+1)
28400 ;; JUMPLE A,G9 ;F(R6.LE.0)GO TO 9
28500 ;; CAME A,(R) ;IF(R6.NE.RY)GO TO 1
28600 ;; JRST GX
28700 ; CHECK CODE NUM
28800 G9: MOVE A,2(R)
28900 CAMG A,.COMM.+6 ;R5 9 IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
29000 CAMGE A,.COMM.+5 ;R4
29100 JRST G2
29200
29300 SKIPG JJ2
29400 MOVE JJ2,X
29500 MOVE .COMM.+=8 ;IF(IPG)RN(L+2)=R7
29600 AOJ J,
29700 ; IN LIMITS?
29800 ; MOVEI A,XRN+=2498 ;J=J+1
29900 ;; MOVEI A,KNR-1
30000 ;; ADDI A,(J)
30100 MOVEI 0,(L)
30200 AOJ K, ;K=K+1
30300 MOVEM 0,NNP-1(K)
30400 ADDI 0,3 ;N(J)=L+3
30500 MOVEM 0,KNR-1(J)
30600 ; NP IS FOR USE IN JUSTIFY ROUTINE
30700 G2: KIFIX RY,(R) ;2 IF(RY.LT.4)GO TO 1
30800 CAIN RY,2 ;IF(RY.EQ.2)GO TO GRST
30900 JRST GRST
31000 CAIGE RY,4
31100 JRST GX
31200 MOVE RZ,-1(R) ;RZ=RN(L) WD CNT
31300 CAIE RY,=44 ;CODE 4 IS SOMETIMES =44
31400 JRST .+4
31500 CAMG RZ,[2.0] ;IF(RZ.LE.2)THEN IT'S AN CODE 44 BAR LINE.
31600 JRST GX
31700 JRST G5 ;FOUND A LINE
31800 CAILE RY,7
31900 JRST GX ;IF(RY.GT.7)GO TO 1
32000 ; TWO-ENDED ITEM?
32100 ;; CAMN RY,[=4.0] ;GO TO(4,5,6,7),IFIX(RY)-3
32200 ;; JRST G4
32300 ;; CAMN RY,[=5.0]
32400 ;; JRST G5
32500 ;; CAMN RY,[=6.0]
32600 ;; JRST G6
32700 ;; CAMG RZ,[=4.0] ;4 IF(RZ.GT.2)GO TO 5
32800 ;; JRST G5 ; THERE IS A TRILL WIGGLE
32900 ;; JRST GX ;GO TO 1 -- NO WIGGLE (P7≠0)
33000 XCT TBL-4(RY) ; NEXT REPLACES THE ABOVE.
33100 JRST G5
33200 JRST GX
33300 TBL: JRST G4
33400 JRST G5
33500 JRST G6
33600 CAMG RZ,[4.0]
33700
33800 G4: CAMG RZ,[=3.0] ;7 IF(RZ.GT.3)GO TO 5
33900 JRST GX
34000 JRST G5 ;GO TO 1
34100 GRST: MOVE RZ,-1(R) ;FOR 'CENTERED' RESTS
34200 JRST G8
34300 G6: CAMGE RZ,[=8.0] ;6 IF(RZ.LT.8)GO TO 8
34400 JRST G8
34500 SKIPL 6(R) ;IF(R7)GO TO 8
34600 SKIPN =9(R) ;IF(R10.EQ.0)GO TO 8
34700 JRST G8
34800 ;; MOVE A,7(R) ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
34900 ;; JUMPE A,G5 ;IF(R8.EQ.0)GO TO G5(MOVE ONLY P3,6)
35000 SKIPG A,7(R) ;IGNORE P8 IF IT IS 0 OR -
35100 JRST G8
35200 CAMG A,.COMM.+6
35300 CAMGE A,.COMM.+5
35400 JRST G8
35500 CAMLE JJ2,X
35600 MOVE JJ2,X
35700 AOJ J, ; IN LIMITS?
35800 MOVEI 0,=8(L) ;J=J+1
35900 MOVEM 0,KNR-1(J)
36000 G8: CAML RZ,[=7.0] ;8 IF(RZ.LT.7)GO TO 5
36100 SKIPG A,8(R) ; R9 IF(R9.LE.0)GO TO G5
36200 JRST G5
36300 CAIE RY,2 ;IF(RY.EQ.2)GO TO GRST2 (NEW CENTERED RESTS)
36400 SKIPE 7(R) ; R8
36500 JRST GRST2
36600 SKIPL 6(R) ; R7
36700 JRST G5
36800 GRST2: CAMG A,.COMM.+6
36900 CAMGE A,.COMM.+5 ;R4
37000 JRST G5
37100
37200 CAMLE JJ2,X
37300 MOVE JJ2,X
37400 AOJ J, ;J=J+1 ; IN LIMITS?
37500 MOVEI 0,=9(L)
37600 MOVEM 0,KNR-1(J) ;N(J)=L+9
37700 G5: CAIN RY,2 ;IF(RY.EQ.2)GO TO GX
37800 JRST GX
37900 MOVE A,5(R)
38000 CAMG A,.COMM.+6
38100 CAMGE A,.COMM.+5 ;R4
38200 JRST GX
38300
38400 CAMLE JJ2,X
38500 MOVE JJ2,X
38600 AOJ J, ; IN LIMITS?
38700 ;| MOVEI A,XRN+=2498 ;J=J+1
38800 ;; ADDI A,(J)
38900 MOVEI 0,6(L) ;5 IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
39000 ;; ADDI 0,6 ;N(J)=L+6
39100 MOVEM 0,KNR-1(J)
39200 GX: CAMGE X,LLL ;1 CONTINUE
39300 AOJA M,G1
39400 MOVEM JJ2,POSI+=8
39500 MOVEM J,KJY+1
39600 MOVEM K,KJY
39700 JRA 16,3(16)
39800
39900 ; SUBROUTINE MOVIT(RN,NP,R4,R5,R8,R9)
40000 ; DIMENSION NP(1),RN(1)
40100 ; COMMON /KJY/ DONT,J
40200 MOVIT: 0 ;RDIS=(R9-R8)/(R5-R4)
40300 MOVE R,@5(16)
40400 FSBR R,@4(16)
40500 MOVE RY,@3(16)
40600 FSBR RY,@2(16)
40700 FDVR R,RY
40800 ; MOVEI L,XRN+=2499 ; DO 1 K=1,J
40900 MOVEI L,@1(16) ; GET NP ARRAY LOC
41000 SETZ K,
41100 MOVE 0,@5(16) ; SET UP R9
41200 ;;M1: MOVE X,L ; L=NP(K)
41300 M1: MOVEI R2,@(16) ;RA=RN(L)
41400 ADD R2,(L)
41500 MOVEI RZ,(R2)
41600 MOVE R2,-1(R2)
41700 CAML R2,@2(16) ;IF(OUTLIM(R4,R5,RA))GO TO 1
41800 CAMLE R2,@3(16)
41900 JRST MX
42000 JUMPE 0,M2 ;IF(R9.NE.0)RA=(RA-R4)*RDIS
42100 FSBR R2,@2(16)
42200 FMPR R2,R
42300 M2: FADR R2,@4(16) ; RN(L)=R8+RA
42400 MOVEM R2,-1(RZ)
42500 MX: AOJ K, ;1 CONTINUE
42600 CAMGE K,KJY+1
42700 AOJA L,M1
42800 JRA 16,6(16)
42900
43000
43100 EXTEN: 0 ;FUNCTION EXTEN(X)
43200 HRRM 16,.+2
43300 JSA 16,AMOD ;EXTEN=AMOD(X,1.)*10.
43400 JUMP @0
43500 JUMP [=1.0]
43600 FMPR [=10.0]
43700 JRA 16,1(16)
43800
43900 DBAR: 0 ; CALL DBAR(K,ITEM,J)
44000 MOVE 4,@2(16) ; -J-RR=RN(J+3)
44100 ;PT SKIPL IPG ;IF(IPG.GE.0)LEAVE BAR ALONE!
44200 ;;; JRST DB1
44300 ;PT KIFIX 2,XRN+3(4) ; -RN(J+4)-
44400 ;KZ=RN(J+4)/100.
44500 ;PT IMULI 2,=100 ;RN(J+4)=1.+KZ*100.
44600
44700 DB1: MOVE 1,@1(16)
44800 MOVE 7,XRN+2(4) ; -RR-
44900 MOVE 4,@(16) ; DO 82 KY=K+1,ITEM
45000 DB: MOVE 5,PTR(4) ;KZ=PWDS(KY)
45100 MOVE 6,XRN(5) ; IF(RN(KZ+1).NE.4)GO TO 82
45200 CAME 6,[4.0]
45300 JRST DB82
45400 MOVE 6,XRN-1(5) ;IF(RN(KZ).GT.3)GO TO 82
45500 CAMLE 6,[3.0]
45600 JRST DB82
45700 ;;C AVOIDS DUPLICATE BARS.
45800 MOVN 6,XRN+2(5) ;IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82
45900 FADR 6,7
46000 SKIPGE 6
46100 MOVNS 6
46200 CAMLE 6,[0.5]
46300 JRST DB82
46400 MOVE 6,[99.0] ;RN(KZ+2)=99
46500 MOVEM 6,XRN+1(5)
46600 SETZM XRN(5) ;RN(KZ+1)=0
46700 DB82: AOJ 4, ;82 CONTINUE
46800 CAIGE 4,(1)
46900 JRST DB
47000 MOVEM 7,DBX# ; RR SAVES IT FOR ADRST ROUTINE
47100 JRA 16,3(16)
47200
47300 QRN: 0 ; CALL QRN(J,XWDS,K)
47400 MOVE 4,@(16) ;810 JA=PWDS(K+1)
47500
47600 PN4: MOVE 5,@2(16) ; DO 7 KY=J,JA-1
47700 MOVE 5,PTR(5) ; - JA -
47800 MOVE 6,XXX ; PN(LK)=RN(KY)
47900 MOVEI 1,(6) ; SAVE IT FOR A LITTLE LATER
48000 PN: MOVE 7,XRN-1(4) ;7 LK=LK+1
48100 MOVEM 7,Q-1(6)
48200 AOJ 4, ;AC4 IS KY, AC6 IS LK
48300 CAME 4,5
48400 AOJA 6,PN
48500 SKIPN SF ;IF(KL.EQ.0)GO TO PN5
48600 JRST PN5
48700 MOVE [1.0] ;PUT A 1.0 AS RHYTHM FOR REST OR NOTE
48800 ADD 6,SF
48900 MOVEM Q-1(6) ;PUT IT IN PARAM 7 OR 9
49000 PN5: AOJ 6,
49100 MOVE 2,.COMM.+6 ; IF(R5)GO TO 6666
49200 JUMPL 2,PN2 ; IF(PN(J).EQ.2)LK=LK+1
49300 MOVEM 2,Q+4(1) ; PN(J+5)=R5
49400 MOVE 3,[3.0]
49500 PN3: MOVE 4,3 ; IS THE WDCNT BIG ENOUGH?
49600 FSBR 4,Q-1(1)
49700 KIFIX 4,4
49800 ADD 6,4 ; UPDATE THE MAIN COUNTER
49900 ;PT??? SETZM Q+3(1) ; ZERO PARAM 4, THE VERTICAL POS. PN(J+4)
50000 MOVEM 3,Q-1(1) ; PN(J)=3 OR 4
50100 JRST PN1
50200 PN2: MOVE 3,RCLF ; IF(R.NE.17)GO TO
50300 CAME 3,[17.0]
50400 JRST PN1
50500 MOVE 3,[4.0] ; THE WDCNT
50600 MOVE 2,RCLF+1 ; CLEF #
50700 MOVEM 2,Q+5(1) ;PN(J+6)=CLEF
50800 JRST PN3
50900 PN1: MOVEM 6,XXX ;LK=LK+1 (6666↑)
51000 MOVE 4,LLL ; -L- XWDS(L)=LK
51100 ADDI 4,@1(16) ; ADDR. XWDS ARRAY
51200 MOVEM 6,(4)
51300 AOS LLL ;L=L+1
51400 JRA 16,3(16)
51500 SORT: 0 ; CALL SORT(XWDS)
51600 MOVE 11,LLL ; L
51700 SOJ 11,
51800 MOVEI 4,1 ;I=1
51900 MOVE 0,[16.0]
52000 MOVE 1,[8.0]
52100 SETZ 5, ; -K- DO 243 K=1,L-1
52200 S2: MOVEI 7,@(16) ; ADDR. OF XWDS
52300 ADDI 7,(5) ;LB=XWDS(K)+1
52400 MOVE 6,(7)
52500 ;; MOVE 10,Q(6) ;IF(PN(LB).NE.16)GO TO 243
52600 ;; CAME 10,[16.0]
52700 CAME 0,Q(6)
52800 JRST S243
52900 ;; MOVE 10,Q-1(6) ;IF(PN(LB-1).LT.8)GO TO 243
53000 ;; CAMGE 10,[8.0]
53100 CAMLE 1,Q-1(6)
53200
53300 JRST S243
53400 MOVE 10,-1(7) ;JL=XWDS(K-1)
53500 MOVE 10,Q+2(10)
53600 MOVEM 10,Q+2(6) ;244 PN(LB+2)=PN(JL+3)
53700 S243: AOJ 5,
53800 CAME 5,11 ; -L-1
53900 JRST S2 ; 243 CONTINUE
54000
54100 ;; PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
54200 ;; FOR SPACING PROBLEMS BELOW.
54300 MOVEI 11,1 ;M=2
54400 SETZ 12, ;J=1
54500 S24: MOVE 13,[100000.0] ;24 RA=100000.;; POSITION
54600 MOVE 1,LLL ; L
54700 SOJ 1,
54800 SETZ 14, ; -K-
54900 S21: MOVEI 2,@(16) ;DO 21 K=1,L-1 - ADDR. OF XWDS -
55000 ADDI 2,(14) ;JL=XWDS(K)+3
55100 MOVE 2,(2)
55200 MOVE 3,Q+2(2) ;R=PN(JL)
55300 CAMN 3,[100000.0]
55400 JRST SX21 ;IF(R.EQ.100000)GO TO 21
55500 MOVE 3 ;241 IF(ABS(R-RA).GT..1)GO TO 240
55600 FSBR 13
55700 SKIPGE
55800 MOVNS
55900 CAMLE 0,[0.1]
56000 JRST S240
56100 MOVEM 13,Q+2(2) ; ((R=RA)) PN(JL)=R
56200 JRST SX21 ;GO TO 21;; PUT IN HERE MULTI-VOICE TRAP SOMEDAY
56300 S240: CAMLE 3,13 ;240 IF(R.GT.RA)GO TO 21
56400 JRST SX21 ;; LINES THEM UP
56500 MOVEI 4,(2) ; SAVES JL (I=K)
56600 MOVE 13,3 ; RA=R ;21 CONTINUE
56700 SX21: AOJ 14, ; -K-¬
56800 CAME 14,1
56900 JRST S21
57000 CAMN 13,[100000.0] ;IF(RA.EQ.100000)GO TO 23
57100 JRA 16,1(16); JUMP IF ALL SORTED
57200 ;;;; MOVE 10,(16) ;242 JL=XWDS(I)
57300 MOVEI 15,(4) ;LA=JL
57400 KIFIX 1,Q-1(4) ;N=PN(JL)+3
57500 ADDI 1,3 ; N
57600 MOVE 2,PTR-1(11) ; PWDS(M)=PWDS(M-1)+N
57700 ADDI 2,(1)
57800 MOVEM 2,PTR(11)
57900 AOJ 11, ; M=M+1
58000 ;; FIXX(1) ;DO 22 K=J,J+N-1
58100 ADDI 1,(12) ; -J+N-
58200 S22: MOVE 2,Q-1(4) ; RN(K)=PN(JL)
58300 MOVEM 2,XRN(12)
58400 AOJ 12,
58500 CAME 12,1
58600 AOJA 4,S22 ;22 JL=JL+1
58700 AOJ 4, ; (JL=JL+1)
58800 MOVE 2,[100000.0] ; PN(LA+3)=100000
58900 MOVEM 2,Q+2(15) ; PUT IT ASIDE
59000 JRST S24 ; GO TO 24
59100
59200 SHIFT: 0 ; CALL SHIFT
59300 SOS LLL ; (IN MAIN. L=L-1)
59400 SETZ 2, ;K=1
59500 SETZ 3, ;L=1
59600 SETO 4, ;LK=1 ((LL=0))
59700 SH221: MOVE 5,PX(2) ;221 IF(Q(IFIX(PN(K))+1))GO TO 321
59800 MOVE 6,Q(5)
59900 JUMPL 6,SH321
60000 MOVE 7,PX+1(2)
60100 SH421: MOVE 6,Q-1(5) ;DO 421 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
60200 MOVEM 6,Q(3) ; ((LL=LL+1))421 Q(LL)=Q(KL)
60300 AOJ 5,
60400 CAMGE 5,7
60500 AOJA 3,SH421
60600 AOJ 4, ;LK=LK+1
60700 AOJ 3,
60800 MOVE 1,3 ;PN(LK)=LL+1
60900 AOJ 1,
61000 MOVEM 1,PX+1(4)
61100 SH321: AOJ 2, ;321 K=K+1
61200 CAMGE 2,LLL ; (L) IF(K.LT.KK)GO TO 221
61300 JRST SH221
61400 AOJ 4,
61500 MOVEM 4,LLL ; L=LK-1 ;; L=NUMBER OF ITEMS FOR RHY RECONS.
61600 JRA 16,(16)
61700
61800 SHFT1: 0 ; CALL SHFT1(KQ)
61900 MOVEI 2,1 ; -L- (KK=1)
62000 MOVEI 6,1 ; -K-
62100 SP: KIFIX 4,Q-1(6) ;220 JJ=Q(K)+3
62200 ADDI 4,3
62300 MOVEM 6,PX-1(2)
62400 ;;NEW POINTER
62500 MOVE Q(6) ;IF(Q(K+1).NE.2.OR.Q(K).LT.6)GO TO SPA
62600 CAME [2.0]
62700 JRST SPA
62800 MOVE [6.0]
62900 CAMLE Q-1(6)
63000 JRST SPA
63100 MOVEI 13,(4) ; JJ
63200 ADDI 13,(6) ; +K
63300 MOVE 3,Q(13) ;IF(Q(JJ+1).NE.10.OR.Q(JJ).LT.6)GO TO SPA
63400 CAMN 3,[10.0]
63500 CAMLE Q-1(13)
63600 JRST SPA
63700
63800 SKIPN IPG ;IF(IPG.EQ.0)GO TO SPA
63900 JRST SPA ;do next only when extracting parts(IPG.NE.0)
64000 SETO 3, ;M=0 (-1)
64100 KIFIX 5,Q-1(13) ; KK=Q(JJ)+2
64200 ;DO SPB N=K,KK
64300 ADDI 5,2 ; KK
64400 MOVEI 7,(6) ; (N=K)
64500 ADDI 5,(7) ; (KK=K+KK+JJ-1)
64600 ADDI 5,(4)
64700 ;; SOJ 5, ; THE TOTAL NUM OF ITEMS TO SCRAMBLE
64800 SPB: MOVE Q-1(7) ;M=M+1
64900 AOJ 3, ; M
65000 MOVEM XRN(3) ;SPB RN(M)=Q(N)
65100 CAIGE 7,(5)
65200 AOJA 7,SPB
65300
65400 MOVEI 3,(13) ; JJ
65500 SUB 3,6 ; M=JJ-K (-1)
65600 MOVEI 7,(5) ; KK
65700 SUB 7,13 ; J=KK-JJ
65800 MOVEI 11,(7) ; KA=J
65900 ADDI 11,(6) ; +K
66000 ;; SOJ 11, ;KA=K+J-1
66100 MOVEI 12,(6) ; N=K
66200 MOVEI 14,(12)
66300 MOVE 15,XRN+3(3) ; SAVE POS (R3)
66400 SPC: MOVE XRN(3) ;DO SPB N=K,KA
66500 MOVEM Q-1(12) ; M=M+1
66600 AOJ 3, ;SPC Q(N)=RN(M)
66700 CAIGE 12,(11)
66800 AOJA 12,SPC
66900
67000 MOVEI 13,(6) ; JJ=K+J
67100 ADDI 13,(7) ; JJ
67200 SETZ 3, ; M=0
67300 SOJ 5, ; KK-1
67400 MOVE 7,XRN+3(3) ; POS OF THIS ITEM
67500 MOVEM 7,Q+2(14) ;EXCHANGE THEM
67600 MOVEM 15,XRN+3(3)
67700 SPD: MOVE XRN(3) ;DO SPD N=JJ,KK-1
67800 MOVEM Q(13) ; M=M+1
67900 AOJ 3, ;SPD Q(N)=RN(M)
68000 CAIGE 13,(5)
68100 AOJA 13,SPD ; ALL THIS TO FIND NUM AFTER WHOLE REST.
68200 JRST SP ;GO BACK TO GET RIGHT PNTRS NOW.
68300 ;K=K+JJ
68400 SPA: ADDI 6,(4) ; -K- (KK=KK+1)
68500 CAMGE 6,@(16) ;IF(K.LT.KQ)GO TO 220
68600 AOJA 2,SP
68700 AOJ 2, ;PN(KK)=K
68800 MOVEM 6,PX-1(2)
68900 MOVEM 2,LLL ;L=KK
69000 JRA 16,1(16)
69100
69200
69300 SHFT0: 0 ; CALL SHFT0(KQ)
69400 MOVE 2,LLL ; L
69500 MOVE 4,PTR-1(2)
69600 SOJ 4,
69700 MOVE 2,@(16) ; KQ
69800 ;; SETZ 3, ; K
69900 ;;SH32: MOVE XRN(3) ; DO 32 K=1,IFIX(PWDS(L))-1
70000 ;; MOVEM Q(2) ; KQ=KQ+1
70100 ;; AOJ 3,
70200 ;; CAME 3,4
70300 ;; AOJA 2,SH32
70400 ;; AOJ 2, ; 32 Q(KQ)=RN(K)
70500 HRLZI 3,XRN ; PUT ADDR OF RN IN LEFT HALF
70600 HRRI 3,Q(2) ; ADDR OF NEXT OPEN SLOT OF Q IN RIGHT HALF
70700 ADDI 2,(4) ; TO LOCATE END OF TRANSFER
70800 BLT 3,Q(2) ; THESE REPLACE THE ';;' ABOVE
70900 MOVEM 2,@(16) ; NEW VALUE OF KQ
71000 MOVEI 1
71100 MOVEM LLL ; L
71200 MOVEM XXX ; LK
71300 JRA 16,1(16)
71400
71500 PSHFT: 0 ; CALL PSHFT(I)
71600 MOVE 6,@(16)
71700 MOVEI 2,1
71800 MOVE 2,PX-1(2) ; DO 31 NA=1,I
71900 MOVE 3,PX(6) ; RN(KL)=Q(NA)
72000 ; 31 KL=KL+1
72100 MOVE 4,SF ; KL
72200 PS31: MOVE 5,Q-1(2)
72300 MOVEM 5,XRN-1(4)
72400 AOJ 2,
72500 CAIE 2,(3)
72600 AOJA 4,PS31
72700 AOJ 4,
72800 MOVEM 4,SF ; PUT BACK NEW VALUE OF KL
72900 JRA 16,1(16)
73000
73100 ; SUBROUTINE ADDRST(RPOS,XWDS,PN)
73200 ; COMMON /XXX/LK,LP,JY /PTR/PWDS(250),L,LL,I,IX
73300 ; COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
73400 ; DIMENSION XWDS(1),PN(1)
73500
73600 ADRST: 0 ; PN(LK)=6
73700 MOVE 1,XXX ; LK
73800 MOVE 6,[6.0] ; CALL ADRST(XWDS,RR)
73900 MOVEM 6,Q-1(1)
74000 MOVE 2,[2.0] ; PN(LK+1)=2
74100 MOVEM 2,Q(1)
74200 ;; MOVE 13,.COMM. ; PN(LK+2)=RS
74300 SETZM Q+1(1)
74400 MOVE 3,DBX ; PN(LK+3)=RPOS-1. (DBX SAVED 'RR')
74500 MOVEM 3,Q+=11(1) ; SEE (LK+3) BELOW
74600 FSBR 3,[1.0]
74700 MOVEM 3,Q+2(1)
74800 SETZM Q+3(1) ; PN(LK+4)=0
74900 SETZM Q+4(1) ; PN(LK+5)=0
75000 SETZM Q+5(1) ; PN(LK+6)=0
75100 MOVEM 6,Q+6(1) ; PN(LK+7)=6.
75200 MOVE 10,[1.0]; PN(LK+8)=-1
75300 MOVNM 10,Q+7(1)
75400 ; LK=LK+9
75500 ; L=L+1
75600 ; XWDS(L)=LK
75700 ; NEXT ADDS A BAR LINE
75800 MOVEM 2,Q+=8(1) ; PN(LK)=2
75900 MOVE [4.0] ; PN(LK+1)=4
76000 MOVEM Q+=9(1)
76100 ;; MOVEM 13,PX+=10(1) ; PN(LK+2)=RS
76200 SETZM Q+=10(1)
76300 ; PN(LK+3)=RPOS (SEE ABOVE)
76400 MOVE 10,@1(16) ;GET BAR LINE INFO
76500 MOVEM 10,Q+=12(1) ; PN(LK+4)=RR
76600 MOVE 2,LLL ; L
76700 HRRZI 3,@(16) ; ADDR OF XWDS
76800 ADDI 3,(2)
76900 ADDI 1,=9
77000 MOVE 4,1
77100 MOVEM 4,(3) ;XWDS(L)=LK
77200 ADDI 4,5
77300 MOVEM 4,1(3) ;XWDS(L+1)=LK
77400 ADDI 2,2
77500 MOVEM 2,LLL ;L=L+2
77600 ADDI 1,5
77700 MOVEM 1,XXX ;LK=LK+14
77800 JRA 16,2(16)
77900
78000 STAFF: 0 ; SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8)
78100 ;; COMMON/XRN/RN(2000) /SF/KL,RT,KP,RSTJ2,NAMX
78200 ;; COMMON /PTR/PWDS(250),L,LL,I,IX
78300 MOVE 2,SF+2 ; KP PWDS(KP)=KL
78400 MOVE 4,SF ; KL
78500 MOVEI 3,(4)
78600 MOVEM 3,PTR-1(2)
78700 AOJ 2, ; KP=KP+1
78800 MOVEM 2,SF+2
78900 MOVE 2,@(16) ; RN(KL)=P0
79000 MOVEM 2,XRN-1(4)
79100 MOVE @1(16) ; RN(KL+1)=P1
79200 MOVEM XRN(4)
79300 MOVE SF+1 ; RN(KL+2)=RT
79400 MOVEM XRN+1(4)
79500 MOVE @2(16) ; RN(KL+3)=P3
79600 MOVEM XRN+2(4)
79700 MOVE @3(16) ; RN(KL+4)=P4
79800 MOVEM XRN+3(4)
79900 MOVE @4(16) ; RN(KL+5)=P5
80000 MOVEM XRN+4(4)
80100 CAMGE 2,[4.0] ; IF(P0.LT.4.)GO TO 1
80200 JRST ST1
80300 MOVE @5(16) ; RN(KL+6)=P6
80400 MOVEM XRN+5(4)
80500 MOVE @6(16) ; RN(KL+7)=P7
80600 MOVEM XRN+6(4)
80700 MOVE @7(16) ; RN(KL+8)=P8
80800 MOVEM XRN+7(4)
80900 MOVE @=8(16) ; RN(KL+9)=P9
81000 MOVEM XRN+=8(4)
81100 MOVE @=9(16) ; RN(KL+10)=P10
81200 MOVEM XRN+=9(4)
81300 MOVE @=10(16) ; RN(KL+11)=P11
81400 MOVEM XRN+=10(4)
81500 MOVE @=11(16) ; RN(KL+12)=P12
81600 MOVEM XRN+=11(4)
81700 ST1: KIFIX 2,2 ;1 KL=KL+P0+3.
81800 ADDI 2,3
81900 ADDM 2,SF
82000 JRA 16,=12(16) ; END
82100
82200 ;;;RIGHT: 0 ; FUNCTION RIGHT(NA,J)
82300 ;; COMMON /PX/PN(1800) /Q/Q(9000)
82400 ;;; MOVE 4,@(16) ; NA K=NA+J
82500 ;;; ADD 4,@1(16) ; +J J IS EITHER +1 OR -1
82600 ;;; MOVE 5,[16.0]
82700 ;;;RT1: MOVE 3,PX-1(4) ; 1 L=PN(K)
82800 ;; MOVE Q(3) ; IF(Q(L+1).NE.16)GO TO 2
82900 ;; CAME [16.0] ; **** CAN'T USE AC2 - USED IN FORTRAN
83000 ;;; CAME 5,Q(3)
83100 ;;; JRST RT2
83200 ;;; ADD 4,@1(16) ; K=K+J
83300 ;;; JRST RT1 ; GO TO 1
83400 ;;;RT2: MOVE Q+2(3) ; 2 RIGHT=Q(L+3)
83500 ;;; JRA 16,2(16) ; END
83600 RIGHT: 0 ;FUNCTION RIGHT(NA,J,JK)
83700 MOVE 4,@(16)
83800 MOVE 6,4
83900 MOVE 11,@1(16) ; SAVE J IN 11
84000 ADD 4,11 ; K=NA+J J= +1 OR -1
84100 SKIPLE 4 ; IF(K.GT.0)GO TO RT4
84200 JRST RT4
84300 MOVE 0,Q+3 ;RIGHT=Q(JK+3)
84400 JRA 16,3(16) ;RETURN
84500 RT4: MOVEI 5,Q ; Q R=Q(JK+2)
84600 ADD 5,@2(16)
84700 MOVE 12,2(5) ; RX=Q(JK+3)-2 CURRENT POS. OF REST-2
84800 ;;; FSBR 12,[2.0] ; NEEDED IF NOTHING FOUND TO LEFT.
84900 MOVE 5,1(5) ;R THE STAFF NUM.
85000 MOVEI 8,1 ;JX=1 FOR REVERSE LOOP
85100 SKIPL @1(16) ;IF(J.GT.0)JX=I FORWARD LOOP
85200 MOVE 8,LLL+2
85300 RT1: JSA 16,CODEN ; DO 134 K=NA-1,1,-1
85400 JUMP PX ; R8=CODEN(KPN,K,Q,LL)
85500 JUMP 4
85600 JUMP Q
85700 JUMP 7 ;LL
85800 CAMN 0,[4.0] ; IF(R8.EQ.4)GO TO 234
85900 JRST RT2
86000 MOVE 3,Q+1(7) ; IF(Q(LL+2).NE.R)GO TO 134
86100 CAME 3,5
86200 JRST RT3
86300 CAME 0,[18.0] ; IF(R8.EQ.18.OR.R8.EQ.17)GO TO 234
86400 CAMN 0,[17.0] ; JUMP ON KEY SIG OR METER
86500 JRST RT2
86600 ;; CAML 0,[10.0] ; IF(R8.GE.10)GO TO 134
86700 ;; JRST RT3
86800 ;; CAME 0,[3.0] ; IF(R8.NE.3)GO TO 234
86900 ;; JRST RT2
87000 RT3: CAMN 4,8 ;134 CONTINUE
87100 JRST .+3
87200 ADD 4,11
87300 JRST RT1
87400 SKIPG 11 ;SKIP NEXT IF GOING FORWARD IN LOOP (LOOKING TO RIGHT)
87500 MOVE 0,12 ;USE ITS OWN POS.-2 IF NOTHING FOUND TO LEFT
87600 SKIPA ; RR=RX
87700 RT2: MOVE 0,Q+2(7) ; C NOW FOUND ITEM TO LEFT OR RT ON THIS STAFF.
87800 JRA 16,3(16) ;234 RR=Q(LL+3)
87900
88000 RESTS: 0 ;XLFT=0 -- CALL RESTS
88100 SETZ 2,
88200 MOVE 12,[4.0]
88300
88400 MOVE 13,[16.0] ; TO CATCH WORDS
88500 MOVN 3,[99.0] ;SIG=-99
88600 ;; MOVE 4,3 ;CLEF=-99
88700 SETZ 6, ; REST=0
88800 MOVEI 7,1 ;K=1
88900 RX50: MOVE 10,PX-1(7) ;50 JL=PN(K)
89000 MOVE 11,Q(10) ;R=Q(JL+1)
89100 JUMPN 2,RX5 ;IF(XLFT.NE.0)GO TO 5
89200 CAMLE 11,[4.0] ;IF(R.LE.4)XLFT=Q(JL+3)
89300 JRST RX5
89400 MOVE 2,Q+2(10)
89500 MOVEM 2,.COMM.+=13
89600 JRST RX3
89700 RX5: CAME 11,[17.0] ;5 IF(R.NE.17)GO TO 3
89800 JRST RX3
89900 MOVE 1,Q+4(10) ;IF(Q(JL+5).EQ.SIG)GO TO 60
90000 CAMN 1,3
90100 JRST RX60
90200 MOVE 3,1 ;SIG=Q(JL+5)
90300 RX3: CAME 11,[2.0] ;3 IF(R.NE.2)GO TO 231
90400 JRST RX231
90500 MOVE Q-1(10) ;IF(Q(JL).GE.6)GO TO 7
90600 CAML [6.0]
90700 JRST RX7
90800
90900 JRST RX231 ;NEXT (TO RX7) DOESN'T WORK YET. NEEDS TO EXPND DATA!
91000 ;; MOVE 1,PX-2(7) ;IF(Q(KPN(K-1))+1).NE.4)GO TO 231
91100 ;; CAMN 12,Q(1)
91200 ;; JRST RX55 ; ANY REST BETWEEN 2 BARS IS A "WHOLE" REST.
91300 ;; CAME 13,Q(1)
91400 ;; JRST RX231 ; IF NOT WORDS, JUMP
91500 ;; MOVE 14,PX-3(7)
91600 ;; CAME 12,Q(14) ; IS THIS ONE A BAR?
91700 ;; JRST RX231 ; NO
91800 ; WON'T CATCH IT IF THERE IS A CLEF, METER, ETC. PRESENT
91900 ;;RX55: MOVE 1,PX(7) ;IF(Q(KPN(K+1))+1).NE.4)GO TO 231
92000 ;; CAME 12,Q(1)
92100 ;; JRST RX231
92200 ; FOUND A WHOLE REST MEAS.
92300
92400 ;;RX8: MOVE 11,[3.0] ;Q(JR)=3 (P7=3)
92500 ;; MOVE 13,PX-1(7) ;JR=JL+7
92600 ;; ADDI 13,6
92700 ;; CAMLE 12,Q(13) ;IF(Q(JR+1).GT.4)GO TO RX9
92800 ;; JRST RX9
92900 ;; MOVNM 11,Q-3(13) ;Q(JR-2)=-3 P5=-3 =DBL WHOLE REST
93000 ;; MOVE [8.0] ;IF(R.LT.8)GO TO RX9
93100 ;; CAMGE Q(13)
93200 ;; JRST RX9
93300 ;; MOVE 11,Q(13) ;Q(JR-1)=IFIX(R/4.0)+2.0
93400 ;; FDVR 11,12
93500 ;; KIFIX 11,11
93600 ;; FLTR 11,11
93700 ;; FADR 11,[2.0]
93800 ;;RX9: MOVEM 11,Q(13)
93900 ;; JRA 16,(16) ;RETURN
94000
94100 RX7: MOVN Q+7(10) ;IF(Q(JL+8).LE.-4)GO TO 231
94200 SKIPLE Q+6(10) ;IF(Q(JL+7).LE.0)GO TO 231 (IGNORE NON-RHYTH.)
94300 CAML [4.0] ;CATCH BAR REPEAT SIGN
94400 JRST RX231
94500 JUMPE RX231 ;IF(Q(JL+8).EQ.0)GO TO 231 (WHOLE REST OVER CUE NOTES)
94600 JUMPN 6,RX6 ;7 IF(REST.NE.0)GO TO 6
94700 MOVEI 13,(10) ;JR=JL+8
94800 ADDI 13,6
94900 ; POINTER TO REST NUM.
95000 MOVE 11,Q(13) ;R=Q(JR-1)
95100 CAMGE 11,[5.0] ;IF(R.LT.5)R=5
95200 MOVE 11,[5.0]
95300 FMPR 11,[0.6] ;Q(JR-1)=R*.6
95400 MOVEM 11,Q(13)
95500 ; REDUCE SIZE OF REST'S TIME SO IT WILL TAKE LESS SPACE.
95600 RX6: FADR 6,[1.0] ;6 REST=REST+1
95700 MOVEM 6,Q+1(13) ;Q(JR)=REST
95800 MOVN [2.0]
95900 MOVEM Q-3(13) ;Q(JR-4)=-2 (LOWER THE REST'S POS.)
96000 MOVEI 10,(7) ;JL=K+2
96100 ADDI 10,2
96200 CAML 10,LLL ;IF(JL.GE.L)RETURN
96300 JRA 16,(16)
96400 MOVE 14,PX-1(10) ;LB=KPN(JL)
96500 MOVE Q(14) ;IF(Q(LB+1).NE.2)GO TO 233
96600 CAME [2.0]
96700 JRST RX233 ; NEXT IS TO COMBINE MEASURES OF REST
96800 MOVE Q-1(14) ;IF(Q(LB).LT.6)GO TO 233
96900 CAMGE [6.0]
97000 JRST RX233
97100 ; SKIP NON-WHOLE RESTS
97200 MOVE 15,PX-2(10) ;N=KPN(JL-1)
97300 ;; MOVE Q(15) ;IF(Q(N+1).NE.4)GO TO 233
97400 CAME 12,Q(15)
97500 JRST RX233
97600 ; IS REST FOLLOWED BY A BAR? OR RHRSL NUM?(COULD BE A PROB. HERE!!!)
97700 ; SO IT WON'T BE FOUND NEXT TIME AROUND.
97800 MOVN [1.0] ;Q(LB+1)=-1
97900 MOVEM Q(14) ; CHANGE CODE #
98000 MOVEM Q(15) ;Q(N+1)=-1
98100 MOVEI 7,(10) ;K=JL
98200 JRST RX6 ;GO TO 6
98300 RX60: MOVE [1.0] ;60 Q(JL+1)=-1
98400 MOVNM Q(10)
98500 JRST RX231 ;GO TO 231
98600 RX233: SETZ 6, ;233 REST=0
98700 RX231: AOJ 7, ;231 K=K+1
98800 CAMGE 7,LLL ;IF(K.LT.L)GO TO 50
98900 JRST RX50
99000 JRA 16,(16) ; END
00100 EXCHG: 0 ;CALL EXCHG(MM(J),NN(J))
00200 HRRZI 1,@(16) ; ADDR OF MM(J)
00300 MOVE 2,1(1) ;VALUE OF MM(J+1)
00400 EXCH 2,@(16) ;EXCHANGE
00500 MOVEM 2,1(1) ; MM(J+1)
00600 HRRZI 1,@1(16) ; ADDR OF NN(J)
00700 MOVE 2,1(1) ;VALUE OF NN(J+1)
00800 EXCH 2,@1(16) ;EXCHANGE
00900 MOVEM 2,1(1) ; NN(J+1)
01000 JRA 16,2(16)
01100
01200 EXCH: 0
01300 MOVE @(16)
01400 EXCH @1(16)
01500 MOVEM @(16)
01600 JRA 16,2(16)
01700
01800 INMUS: 0 ;CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
01900 MOVE 1,@(16)
02000 MOVE 2,@1(16)
02100 JSA 16,GETEXT
02200 JUMP 1 ;NAME
02300 JUMP 2 ;EXT
02400 MOVE 11,4(16) ;LOC OF RSTFAC ARRAY
02500 MOVE 12,3(16) ;LOC OF KWDS ARRAY
02600 JSA 16,EXTIN ;ACCEPT 2,NAM
02700 JUMP @11 ; CALL GETEXT(NAM,'MS')
02800 JUMP [=20] ;READ ONLY 20 WDS IN PAGE ONLY****** NOT [=128]
02900 MOVE 15,2(16) ;LOC OF RN ARRAY
03000 I1: JSA 16,EXTIN ;CALL EXTIN(R,JJ)
03100 JUMP @15 ;JUMP @R
03200 JUMP =18(11) ;WDS ;THE WD CNT.
03300 MOVE @15 ;@R ;IF(R(1).NE.INTEGER 1)GO TO I3
03400 CAIE 1 ;OLD FORMAT ?
03500 JRST I3 ;NO
03600 USETI 12,2 ;YES, READ 2ND RECORD AGAIN (12 =CH)
03700 JSA 16,EXTIN ;CALL EXTIN(RS,128)
03800 JUMP @12 ;JUMP @KW
03900 JUMP =17(11) ;JUMP NWDS ;CALL EXTIN(K,J)
04000 JRST I1 ;GO BACK AND GET R ARRAY
04100 I3: MOVEI 1,1 ;3 N=1 ;KK(NN)=N
04200 MOVEM 1,(12) ;K(1)=1
04300 MOVEI 5,1
04400 I4: ADD 15,5 ;4 N=N+R(N)+3 HERE'S THE LOOP
04500 KIFIX 5,-1(15) ;GET WD CNT -2
04600 ;; SKIPG 5 ;LEAVE IF NUM. IS .LE.0
04700 ;; JRA 16,5(16)
04800 I5: ADDI 5,3 ;NN=NN+1
04900 ADD 1,5
05000 AOJ 12, ;UPDATE THE COUNTER OF THE POINTER LIST
05100 MOVEM 1,(12) ;KK(NN)=N
05200 CAMGE 1,=18(11) ;IF(N.LT.JJ)GO TO 4
05300 JRST I4
05400 JRA 16,5(16)
00100 RCURVE: 0 ; R7=RCURVE(R3)
00200 MOVEI 2,@(16) ; R7=2.0+(R6-R3)/25.+ABS(R4-R5)/10.
00300 MOVE 1,3(2)
00400 FSBR 1,(2) ;R6-R3
00500 MOVE 3,5(2) ;IF(R8.LT.-1)Z=Z+R8*2.
00600 FADR 3,[1.0]
00700 JUMPGE 3,RCRV ;R8=-2=BETWEEN NOTES, =-3=1ST NOTE IS DOTTED.
00800 FADR 3,3
00900 FADR 1,3
01000 RCRV: FDVR 1,[25.0] ; /25.
01100 MOVE 0,2(2)
01200 FSBR 0,1(2) ;R5-R4
01300 MOVMS ;ABSOLUTE VALUE
01400 FDVR 0,[10.0] ; /10.
01500 FADR 0,1
01600 FADR 0,[2.0] ; +2.0 (THIS IS + .9 IN MS)
01700 SKIPGE 4(2) ;IF(R7 WAS .LT.0)KEEP IT NEGATIVE.
01800 MOVNS
01900 JRA 16,1(16)
02000
02100 SHRNK: 0 ;CALL SHRNK(K,IT)
02200 MOVE 10,@1(16)
02300 MOVE 11,PX(10) ;END OF Q DATA
02400 SOJ 10,
02500 MOVE 2,@(16) ;K
02600 MOVEI 12,(2)
02700 MOVE 3,PX-1(2) ;PTR TO Q(n)
02800 MOVEI 6,(3) ;SAME
02900 MOVE 13,Q+2(3) ;POS. OF CLEF TO BE REMOVED.
03000 MOVE 4,PX(2) ;PTR TO NEXT ITEM
03100 MOVEI 1,(4) ;TO USE IN BLT
03200 SUBI 3,(4) ;WDCCNT OF DELETE ITEM
03300 SUB 4,PX+1(2) ; NEXT +1
03400 SUB 3,4 ; AMOUNT OF CHANGE
03500 SK: MOVE 5,PX+1(2)
03600 SUB 5,PX(2)
03700 ADD 5,PX-1(2)
03800 MOVEM 5,PX(2)
03900 CAIE 2,(10)
04000 AOJA 2,SK
04100 MOVE 2,PX(2) ; LAST PTR
04200 MOVE 7,Q+2(6) ;POS FOR LATER "MOVE"
04300 SK2: MOVE Q-1(1)
04400 MOVEM Q-1(6)
04500 AOJ 1,
04600 CAIE 1,(11)
04700 AOJA 6,SK2
04800 MOVEM 10,@1(16)
04900 MOVEM 10,LLL+2 ;I=LEND (FOR FINAL ENDPOINT)
05000 ;; AOJ 10, ; TO GET TO END OF DATA.
05100 MOVEM 7,.COMM.+5 ;R4
05200 SKMV: SETZM LLL+1 ;LL=0 (NO JUSTIFY)
05300 MOVE 2,[200.0]
05400 MOVEM 2,.COMM.+6 ;R5
05500 SETZM .COMM. ;RS
05600 MOVEM 2,.COMM.+=10 ;R9=R5
05700 SETZM .COMM.+=8 ;R7
05800 MOVEM 13,.COMM.+=9 ;R8=EXPAND REMAINDER OF LINE TO CLEF POS.
05900 JSA 16,PTMOVE
06000 JUMP Q
06100 JUMP PX-1(12)
06200 JRA 16,2(16)
06300
06400 EXPND: 0 ; TO SHIFT LINE TO RT. WHEN ADDING KSIG.
06500 MOVE 5,[5.0]
06600 MOVE 2,[7.1]
06700 FMPR 2,STF+=8
06800 MOVEM 2,.COMM.+5 ;R4=7*RSTJ2+.1
06900 MOVE 12,@(16) ; GET PTR TO PX
07000 ADDI 12,2 ; ADD 2 (FOR NOW, ANYWAY)
07100 SETZM .COMM.+=9
07200 JRST SKMV ; GO MOVE IT
07300
07400 CLFNUM: 0 ;X=CLFNUM(Q,PX,MS) (FUNCTION)
07500 MOVEI 2,@1(16) ;GET PX'S ADDR
07600 ADD 2,@2(16)
07700 MOVE 2,(2) ;PX(MS)
07800 MOVEI 1,@(16) ; ADDR OF Q
07900 ADD 2,1 ;ADDR OF Q(PX(MS)+1)
08000 MOVE 5(2) ;X=Q(PX(MS)+5)
08100 MOVE 1,-1(2)
08200 CAMGE 1,[3.0] ;IF (Q( ).LT.3)X=0
08300 SETZ ; ANSWER IN AC0
08400 JRA 16,3(16)
08500
08600 SLRV: 0 ; CALL SLRV(KK,C)
08700 MOVE 1,@(16) ; KK
08800 MOVE 2,@1(16) ; C
08900 FADRM 2,Q+3(1) ; WORKS WITH Q ARRAY ONLY******
09000 FADRM 2,Q+4(1) ; FOR Q(KK+4) AND (KK+5)
09100 MOVNS Q+6(1) ; Q(KK+7)
09200 JRA 16,2(16)
09300
09400 CLEFN: 0
09500 MOVEI 3,@(16) ;FUNCTION CLEFN(Q,J)
09600 ADD 3,@1(16) ;Q(J+1) NOW
09700 MOVE 2,-1(3) ;IF(Q(J).LT.3)RR=0
09800 SETZ 0,
09900 CAML 2,[3.0]
10000 MOVE 0,4(3)
10100 JRA 16,2(16)
10200 ; CAMGE 0,[100.0]
10300 ; JRA 16,2(16) ;IF(Q(J+5).LT.100)RR=Q(J+5)
10400 ; JSA 16,AMOD
10500 ; JUMP 4(3) ;ELSE RR=AMOD(Q(J+5),100.0)
10600
10700 MMNN: 0 ;CALL MMNN(K)
10800 MOVEI 2,1 ;N=N+1
10900 ADDB 2,JN+1 ;NN(N)=0
11000 ;;;; SETZM XRN+=499(2)
11100 MOVE @(16)
11200 CAIE 0,3 ;IF(K.NE.3)NN(N)=-1 FOR SECONDARY POSITIONS.
11300 SETOM XRN+=499(2)
11400 ADD JN ;MM(N)=J+K
11500 MOVEM XRN-1(2)
11600 JRA 16,1(16)
11700
11800 CODEN: 0 ;FUNCTION CODEN(K,N,R,M)
11900 MOVE 1,@1(16) ;PNTR TO K ARRAY
12000 SOJ 1,
12100 ADDI 1,@(16) ;ADD LOC OF K ARRAY
12200 MOVE 1,(1) ;GET PNTR TO R ARRAY
12300 MOVEM 1,@3(16) ;SEND IT BACK IN M
12400 ADDI 1,@2(16) ;ADD LOC OF R ARRAY
12500 MOVE (1) ;R(M+1) (CODE NUM OF ITEM)
12600 JRA 16,4(16)
12700
12800 ZERO: 0 ;FUNCTION ZERO(X,Y)
12900 MOVE @(16) ;ZERO=X-Y
13000 FSBR @1(16)
13100 SKIPGE ;IF(ABS(ZERO).LT..01)ZERO=0
13200 MOVNS
13300 CAMG 0,[0.01]
13400 SETZ 0,
13500 JRA 16,2(16) ;END
13600
13700 ; DO NEXT IF MORE THAN 1 STAFF(KPG) AND DIFF. SIZE FACTORS ARE FOUND.
13800 BARFAC: 0 ;CALL BARFAC(KPG,BFAC,JK) R=RSTFAC(1)
13900 MOVE 10,STF ; DO 5112 K=2,KPG
14000 MOVEI 2,1
14100 BA: CAME 10,STF(2) ;5112 IF(R.NE.RSTFAC(K))GO TO 6112
14200 JRST BB
14300 AOJ 2,
14400 CAML 2,@(16)
14500 JRA 16,3(16) ; GO TO 3112 -- RETURN
14600 JRST BA
14700 ; NEXT TO FIND PROBABLE SIZE FACTOR FOR THIS BAR. (NOT FOR PARTS)
14800 ; FIND LINE WITH MOST ACTIVITY.
14900 ; ALL THIS SORT OF WORKS. SOMEDAY REVIEW IT.********
15000 BB: MOVEI 2,7 ;6112 DO 1112 K=1,8
15100 BC: SETZM XRN(2)
15200 SOJGE 2,BC ;1112 RN(K)=0
15300 MOVE 2,@2(16) ; DO 112 K=JK,J-1
15400 MOVE 7,[7.0]
15500 ;; MOVE 5,[5.0];;;;; WE COUNT ALL RESTS, EVEN WITH NO RHYTHM.
15600 BD: MOVEM 2,KBD# ;'KBD' WILL BE 'K'
15700 JSA 16,CODEN ; R=CODEN(KPN,K,Q,JD)
15800 JUMP PX ; /PX/ IS KPN
15900 JUMP KBD ; 'K'
16000 JUMP Q
16100 JUMP JD# ; 'JD'
16200 CAMLE [3.0] ; IF(R.GT.3.)GO TO 112
16300 JRST B112
16400 MOVE 4,[1.0] ; A=1.0
16500 CAMN [2.0] ; CHECKS FOR NUMBER OF NOTES, RESTS, CLEFS.
16600 MOVE 4,[0.6] ;AC0 IS R IF(R.EQ.2)A=0.6
16700 ; SKIP NON-RHYTHM CHORD NOTES. RESTS ARE CONSIDERED LESS IMPORTANT.
16800 MOVE 11,JD ; GET POINTER TO ITEM IN Q ARRAY
16900 CAME [1.0] ; IF(R.NE.1)GO TO 4112
17000 JRST B4112
17100 CAMG 7,Q-1(11) ; IF(Q(JD).LT.7)GO TO 112
17200 SKIPG Q+8(11) ; IF(Q(JD+9).LE.0)GO TO 112
17300 JRST B112
17400 B4112: KIFIX 12,Q+1(11) ;4112 LF=Q(JD+2)+1
17500 FADRM 4,XRN(12) ; RN(LF)=RN(LF)+A
17600 B112: AOJ 2, ;112 CONTINUE
17700 CAMGE 2,JN ;/JN/ IS J
17800 JRST BD
17900 SETZ 2, ; JD=1
18000 MOVE 3,XRN ; B=RN(1)*RSTFAC(1)
18100 FMPR 3,STF
18200 MOVEI 4,1 ; DO 2112 K=2,KPG
18300 BE: MOVE 5,XRN(4) ; A=RN(K)*RSTFAC(K)
18400 FMPR 5,STF(4)
18500 CAMG 5,3 ; IF(A.LE.B)GO TO 2112
18600 JRST B2112
18700 MOVE 2,4 ; (-1) JD=K
18800 MOVE 3,5 ; B=A
18900 B2112: AOJ 4, ;2112 CONTINUE
19000 CAME 4,@(16)
19100 JRST BE
19200 MOVE 2,STF(2) ; BFAC=BFAC*(RSTFAC(JD)+.1)
19300 FADR 2,[0.1] ; +.1 ABOVE TO MINIMIZE DIFF. IN SIZE FACTOR.
19400 FMPRM 2,@1(16)
19500 JRA 16,2(16) ;RETURN
19600
19700 ; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
19800 CH3←12
19900 CH2←11
20000 BLKS←←=1
20100
20200 ;CALL PUTEXT(<FILE>,<EXT>)
20300
20400 PUTEXT: 0 ;USES EXTOUT,FINEXT, CH2
20500 MOVE 0,@0(16)
20600 MOVEM 0,FILNAM
20700 MOVE 0,@1(16)
20800 MOVEM 0,EXTNAM
20900 JSA 16,INTFIL
21000 SETZM DIR+2
21100 SETZM DIR+3
21200 ENTER CH2,DIR
21300 ERROR <ENTER FAILED>
21400 JRA 16,2(16)
21500
21600 ;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
21700
21800 EXTOUT: 0
21900 HRRZI 0,@0(16)
22000 SUBI 0,1
22100 MOVEM 0,COM
22200 MOVN 0,@1(16)
22300 HRLM 0,COM
22400 OUTPUT CH2,COM
22500 STATZ CH2,740000
22600 ERROR <WRITE ERROR>
22700 JRA 16,2(16)
22800
22900
23000 INTFIL: 0 ;INITS DSK
23100 MOVEI REGS
23200 BLT REGS+3
23300 INIT CH2,17
23400 SIXBIT/DSK/
23500 0
23600 ERROR <CAN'T INIT DSK!>
23700 EXTF4: PUSHJ 17,INTF4
23800 ;NEXT IS NEAR TOP OF FILE.********
23900 ;INTF4: MOVE 0,FILNAM#
24000 ; MOVEM 0,FN#
24100 ; MOVE 1,[POINT 7,FN]
24200 ;INTF3: MOVE 2,[POINT 6,DIR]
24300 ; SETZM DIR
24400 ; MOVEI 3,5
24500 ;INTF1: ILDB 0,1
24600 ; CAIN 0," "
24700 ; JRST INTF2
24800 ; SUBI 0,40
24900 ; IDPB 0,2
25000 ; SOJG 3,INTF1
25100 ;INTF2: HRLZI REGS
25200 ; BLT 3
25300 MOVE 0,EXTNAM#
25400 MOVEM 0,EX#
25500 MOVE 1,[POINT 7,EX]
25600 EXTF3: MOVE 2,[POINT 6,DIR+1]
25700 SETZM DIR+1
25800 MOVEI 3,5
25900 EXTF1: ILDB 0,1
26000 CAIN 0," "
26100 JRST EXTF2
26200 SUBI 0,40
26300 IDPB 0,2
26400 SOJG 3,EXTF1
26500 EXTF2: HRLZI REGS
26600 BLT 3
26700 JRA 16,0(16)
26800
26900
27000 COM: OCT 0,0
27100 COM1: 0
27200 BLKNUM: 0
27300
27400 ;CALL FINEXT
27500 FINEXT: 0
27600 CLOSE CH2,0
27700 STATZ CH2,740000
27800 ERROR <ERROR AFTER CLOSE>
27900 RELEASE CH2,0
28000 JRA 16,0(16)
28100
28200 ;CALL GETEXT(<FILE>,<EXT>)
28300
28400 GETEXT: 0
28500 MOVE 0,@0(16)
28600 MOVEM 0,FILNAM
28700 MOVE 0,@1(16)
28800 MOVEM 0,EXTNAM
28900 JSA 16,INTFIZ
29000 SETZM DIR+3
29100 SETZM DIR+2
29200 LOOKUP CH3,DIR
29300 ERROR <LOOKUP FAILED>
29400 JRA 16,2(16)
29500
29600
29700 INTFIZ: 0 ;INITS DSK FOR INPUT
29800 MOVEI REGS
29900 BLT REGS+3
30000 INIT CH3,17
30100 SIXBIT/DSK/
30200 0
30300 ERROR <CAN'T INIT DSK!>
30400 JRST EXTF4
30500
30600
30700 ;CALL FASTI2(<ARRAY>,<NO. WORDS>)
30800
30900 EXTIN: 0
31000 HRRZI 0,@0(16)
31100 SUBI 0,1
31200 MOVEM 0,COM
31300 MOVN 0,@1(16)
31400 HRLM 0,COM
31500 INPUT CH3,COM
31600 STATZ CH3,740000
31700 0
31800 JRA 16,2(16)
31900
32000 END